# -*- coding: utf-8 -*- 
# @project : 《Atcoder》
# @Author : created by bensonrachel on 2021/8/30
# @File : TPM（step3）H. A-B Knapsack（CF）.py

import itertools
def TPM():
    res = 0
    for i in range(0,n+1):
        if(i*a>s):
           break
        j = min(m,(s-i*a)//b)#因为有可能剩下的重量大于用上全部的B，那这样就只能取m了，最多m个B
        res = max(res,A[i]+B[j])
    return res

def TPM1():
    res = 0
    j = m#一定递减
    for i in range(0,n+1):
        if(i*a>s):
           break
        while(i*a + j*b > s):
            j -= 1
        res = max(res,A[i]+B[j])
    return res
"""
因为选择k个A,一定是选择前k大的;所以必须先排序两个数组

类比“172 C - Tsundoku”

这道题是求最大的成本，然后不能超过背包容量

两题的区别是，这题：数组的值是用来计算max的，数组的下标是用来计算限制条件的：可以用前缀和（方便）（不用多次sum（）），不需要用二分找插入点，因为限制条件是下标（连续），不涉及数组的值，重量是固定的，min(m,(s-i*a)//b)就可以了
           “172 C - Tsundoku”：数组的下标是用来计算max的（书的个数），数组的值是用来计算限制条件的（时间限制）：要用前缀和，要用二分找插入点，因为涉及数组的值（不连续）
        
"""
if __name__ == '__main__':
    n,m,s,a,b = map(int,input().split())
    arr_a = [int(i) for i in input().split()]
    arr_b = [int(i) for i in input().split()]
    arr_a.sort(reverse=True)
    arr_b.sort(reverse=True)
    A = [0]+list(itertools.accumulate(arr_a))
    B = [0]+list(itertools.accumulate(arr_b))
    res = TPM()
    print(res)
